package proyectoX.src.municiones;


import java.awt.Point;
import java.awt.Rectangle;

import javax.swing.ImageIcon;

import proyectoX.src.aplicacion.Nivel;
import proyectoX.src.armas.Rastreador;
import proyectoX.src.entidades.Enemiga;

/**
 * Misil rastreador utilizado por la nave mediana como arma secundario.
 * Se crea un hilo de 3 municiones. Si ésta es la tercera, no crea ninguna más.
 *
 */
public class MunisionRastreador extends MunicionX {

	protected Rastreador arma;
	protected Enemiga naveEnemiga;
	protected int numero;
	protected boolean crearExtra;
	protected long momentoCreacion;

	protected static final long DELAY_CREACION = 200;

	/**
	 * Crea a la munición con los datos pasados por parámetro.
	 * @param posX Posición x.
	 * @param posY Posición y.
	 * @param e Rastreador que la dispara.
	 * @param nivel Nivel actual.
	 * @param num Índice correspondiente a esta munición del hilo de misiles.
	 */
	public MunisionRastreador(int posX, int posY, Rastreador e,Nivel nivel, int num) {
		super(e,nivel,0);

		this.arma = e;
		numero = num;
		momentoCreacion = System.currentTimeMillis();

		crearExtra =  (numero != 3);

		ImageIcon imagen = new ImageIcon(this.getClass().getResource("/proyectoX/sprites/misil_a.png"));
		this.setIcon(imagen);
		this.setVisible(true);
		this.setSize(imagen.getIconWidth(), imagen.getIconHeight());		
		this.setLocation(posX, posY-17);
		naveEnemiga=nivel.obtenerMasCercana(getLocation());
	}


	/**
	 * Actualiza su posición yendo en dirección de la nave enemiga más cercana.
	 * De no tener una nave enemiga más cercana se desplaza de manera recta hacia ariba.
	 */
	public void actualizarPosicion() {		
		if ((crearExtra)&&(System.currentTimeMillis() - momentoCreacion >= DELAY_CREACION)) {
			crearExtra = false;
			Point location = nivel.obtenerNavePrincipal().getLocation();
			MunicionX m = new MunisionRastreador(location.x-5,location.y,arma,nivel, numero+1);
			nivel.agregarMunicion(m);
		}
		naveEnemiga=nivel.obtenerMasCercana(getLocation());
		if (naveEnemiga!=null){
			Point position = this.getLocation();		
			if(naveEnemiga.getX()< position.getX()){
				if(naveEnemiga.getY()< position.getY()){
					//esta mas arriba
					position.translate(-5,-5);
				}
				else{
					position.translate(-5,+5);
				}
			}
			else {
				if(naveEnemiga.getY()< position.getY()){
					//esta mas arriba
					position.translate(+5,-5);
				}
				else{
					position.translate(+5,+5);
				}
			}

			this.setLocation(position);
		}
		else {
			//avanza verticalmente si no hay naves enemigas cercanas
			this.setLocation(getX(),getY()-5);
		}
	}

	/**
	 * Devuelve el área de colisión de la munición. En este caso es nula porque no colisiona.
	 * @return Área de colisión.
	 */
	public Rectangle getBounds() {
		return new Rectangle(this.getX(), this.getY(), 100, 30);
	}


	/**
	 * Pide a nivel que calcule colisiones con las naves enemigas.
	 * @return Verdadero si colisiona, falso en caso contrario.
	 */
	public boolean calcularColisiones() {		
		return 	nivel.calcularColisionConEnemigas(this);
	}

}

